package com.cencat.route.config.handler;

import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.cencat.common.context.TenantContext;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;

/**
 * 路线规划系统多租户处理器
 * 
 * @author cencat
 * @since 2024-01-01
 */
@Component
public class RouteTenantLineHandler implements TenantLineHandler {

    /**
     * 租户字段名
     */
    private static final String TENANT_ID_COLUMN = "tenant_id";

    /**
     * 需要忽略的表名列表
     */
    private static final List<String> IGNORE_TABLES = Arrays.asList(
            "sys_user",
            "sys_role",
            "sys_permission",
            "sys_dict",
            "sys_config",
            "sys_log",
            "route_algorithm_config",
            "route_template",
            "route_optimization_log"
    );

    /**
     * 获取租户ID
     */
    @Override
    public Expression getTenantId() {
        Long tenantId = TenantContext.getCurrentTenantId();
        if (tenantId != null) {
            return new LongValue(tenantId);
        }
        // 如果没有租户ID，返回默认值0（系统级数据）
        return new LongValue(0L);
    }

    /**
     * 获取租户字段名
     */
    @Override
    public String getTenantIdColumn() {
        return TENANT_ID_COLUMN;
    }

    /**
     * 判断是否忽略该表
     */
    @Override
    public boolean ignoreTable(String tableName) {
        return IGNORE_TABLES.contains(tableName.toLowerCase());
    }
}